#define _POSIX_SOURCE
#define _XOPEN_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include "libtabla.h"
#include "liblist.h"
#include "libmem.h"
#include "libqueue.h"
#include "defines.h"

#ifndef __LIBLOG__
#define __LIBLOG__

/* Loguea eventos comunes. Parametro: Comentario del evento, nombre del proceso (MLP o PCP), pid del thread, nombre del thread, tipo de logueo */
void loguear_evento (const char *evento, const char *proc, pthread_t pthread, const char *thread, const char *tipo);

/*Loguea el estado del sistema recorriendo todas sus listas. Parametros:Listas que debe imprimir dicho proceso,tabla de procesos, tipo de logueo */
void loguearPCP (Lista *listalistos,Lista *listaExSuspendidos,Lista *listaSuspendidosListos, Tabla *tabla, const char *tipo); 

void loguearMLP (Lista *listaNuevos,Lista *listaBloqueados,Lista *listaIOTerminada, Tabla *tabla, const char *tipo);

/*Loguea la finalizacion de un programa. Notifica por output y guarda en un archivo de logueo todos los valores de las variables del programa*/
//Parametro: proceso, id del proceso, tabla , nombre del proceso, pid del thread, nombre del thread, tipo de logueo 
void loguear_program_finish (int id, Tabla *, const char *proc, pthread_t pthread, const char *thread, const char *tipo);

/*Loguea el cambio de lista. Parametros: id del proceso que cambia de lista, Lista de la que sale
, Lista a la que va, tabla, nombre del proceso que loguea (MLP o PCP), pid del thread, nombre del thread*/

void loguear_change_list (int id, int lista1, int lista2, Tabla *, const char *proc, pthread_t pthread, const char *thread, const char *tipo);


#endif /*LIBLOG_H_*/
